#pragma once
// Esta clase se encarga de parsear los argumentos de la linea de comandos
/* Ejemplo de uso:
int main(int argc, char* argv[]) {
	Index index;
	ParserCLI cli(argc, argv);
	if(!cli.validate())
		return 1;
	if(cli.queryType() == ParserCLI::QUERY) {
		// Resolver query
		std::string indexName = cli.getIndexName();
		std::string query = cli.getQuery();
		index.resolveQuery(indexName, query);
	}else if(cli.queryType() == ParserCLI::BUILD) {
		// Construir un indice
		std::string indexName = cli.getIndexName();
		std::string indexDir = cli.getIndexDir();
		index.build(indexName, indexDir);
	}
	return 0;
}
*/

typedef unsigned char QueryType;

class ParserCLI {
	public:
	// Constructor; toma como parametros los que recibe main()
	// La clase queda lista para ser usada
	ParserCLI(int argc, char* argv[]);
	// Devuelve el tipo de query
	QueryType queryType() const;
	// Los posibles tipos
	static const QueryType QUERY = 0; // Consulta
	static const QueryType BUILD = 1; // Construccion
	// Funcion que valida que los argumentos pasados tienen sentido
	// Devuelve true para exito y falso si los argumentos no son validos o incompletos
	// En caso de error, imprime por std::cerr directamente
	bool validate();
	// Getters para los parametros
	// Nombre del index, ya sea para QUERY o BUILD
	std::string getIndexName() const;
	// El directorio a indexar para modo BUILD
	std::string getIndexDir() const;
	// La query (texto) para modo QUERY
	std::string getQuery() const;
};